//package com.ruoyi.danny.controller;
//
//
//import com.ruoyi.common.core.web.domain.AjaxResult;
//import org.activiti.api.process.runtime.ProcessRuntime;
//import org.activiti.engine.*;
//import org.activiti.engine.repository.Deployment;
//import org.activiti.engine.repository.ProcessDefinition;
//import org.activiti.engine.repository.ProcessDefinitionQuery;
//import org.activiti.engine.runtime.ProcessInstance;
//import org.activiti.engine.task.Task;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//
//@RestController
//@RequestMapping("/flow2")
//public class Activiti72gController {
//    /**
//     * 流程部署操作
//     */
//    @Test
//    public void test1() {
//        // 1.获取ProcessEngine对象
//        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        // 2.完成流程的部署操作 需要通过RepositoryService来完成
//        RepositoryService repositoryService = processEngine.getRepositoryService();
//        // 3.完成部署操作
//        Deployment deploy = repositoryService.createDeployment()
//                .addClasspathResource("flow/test6.bpmn20.xml")
//                .name("候选人组")
//                .deploy(); // 是一个流程部署的行为 可以部署多个流程定义的
//        System.out.println(deploy.getId());
//        System.out.println(deploy.getName());
//    }
//    /**
//     * 发起一个流程
//     */
//    @Test
//    public void test3() {
//        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
//        // 发起流程 需要通过 runtimeService来实现
//        RuntimeService runtimeService = engine.getRuntimeService();
//        // 通过流程定义ID来启动流程 返回的是流程实例对象
//        ProcessInstance processInstance = runtimeService
//                .startProcessInstanceById("holiday1:3:97503");
//        System.out.println("processInstance.getId() = " + processInstance.getId());
//        System.out.println("processInstance.getDeploymentId() = " +
//                processInstance.getDeploymentId());
//        System.out.println("processInstance.getDescription() = " +
//                processInstance.getDescription());
//    }
//    /**
//     * 候选人组：
//     * 具体的用户。比如 张三 登录了系统
//     * 查询张三对应的 组 根据 组来查询待办的任务
//     */
//    @Test
//    public void test4() {
//        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
//        TaskService taskService = engine.getTaskService();
//        String group = "销售部"; // 根据当前登录用户查询到的
//        List < Task > list = taskService.createTaskQuery()
//                .taskCandidateGroup(group)
//                .list();
//        if (list != null && list.size() > 0) {
//            for (Task task: list) {
//                System.out.println("task.getId() = " + task.getId());
//                //taskService.complete(task.getId());
//            }
//        }
//    }
//    /**
//     * 待办任务的 拾取 操作
//     * 从候选人 --> 处理人
//     * 一个任务如果被拾取后。其他的候选人就查询不到改任务信息了
//     */
//    @Test
//    public void test5() {
//        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
//        TaskService taskService = engine.getTaskService();
//        String group = "销售部"; // 根据当前登录用户查询到的
//        List < Task > list = taskService.createTaskQuery()
//                .taskCandidateGroup(group) // 根据组来查询
//                .list();
//        if (list != null && list.size() > 0) {
//            for (Task task: list) {
//                // 张三1 拾取了 这个任务的审批权限 --> 变成了这个任务的审批人
//                taskService.claim(task.getId(), "张三1");
//            }
//        }
//    }
//    /**
//     * 归还：拾取的用户 不审批了。就放弃审批人的操作
//     * 其他的候选人可以重新拾取人了
//     */
//    @Test
//    public void test6() {
//        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
//        TaskService taskService = engine.getTaskService();
//        String group = "销售部"; // 根据当前登录用户查询到的
//        List < Task > list = taskService.createTaskQuery()
//                .taskAssignee("张三1")
//                .list();
//        if (list != null && list.size() > 0) {
//            for (Task task: list) {
//                // System.out.println("task.getId() = " + task.getId());
//                // 归还操作的本质其实就是设置审批人为空
//                taskService.unclaim(task.getId());
//            }
//        }
//    }
//    /**
//     * 获取用户审批权限的用户没有时间审批了
//     * 但是他也可以不用归还而是做任务的交接。把这个任务让另一个人来审批
//     */
//    @Test
//    public void test8() {
//        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
//        TaskService taskService = engine.getTaskService();
//        String group = "销售部"; // 根据当前登录用户查询到的
//        List < Task > list = taskService.createTaskQuery()
//                .taskAssignee("张三1")
//                .list();
//        if (list != null && list.size() > 0) {
//            for (Task task: list) {
//                // System.out.println("task.getId() = " + task.getId());
//                // 任务交接
//                taskService.setAssignee(task.getId(), "李四1");
//            }
//        }
//    }
//    /**
//     * 任务审批
//     */
//    @Test
//    public void test7() {
//        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
//        TaskService taskService = engine.getTaskService();
//        taskService.complete("92505");
//    }
//}
